#!/usr/bin/env python3
# python脚本文件执行特殊的方式：(1)、在py文件首行写入"#! /usr/bin/env python3"；(2)、给py脚本文件赋予可执行权限

# 当前工程的辅助的开发脚本，功能：批量生成SKU商品的详情静态化页面
import os,sys

# /Users/weiwei/Desktop/meiduo_mall_sz42/meiduo_mall/scripts/regenerate_detail_html.py
# __file__: python内置变量，指的就是当前py文件

# /Users/weiwei/Desktop/meiduo_mall_sz42/meiduo_mall
# os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
# 把django外层目录加入导包路径，为了是的后续的dev.py能够正常导入使用
sys.path.insert(
    0,
    os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
)
# 加载django环境
# (1)、设置django配置文件导包路径
# 设置django工程默认配置文件的导包路径
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'meiduo_mall.settings.dev')
# (2)、手动加载django环境
import django
django.setup()

from django.conf import settings
from django.template import loader
from contents.utils import get_categories
from goods.utils import get_breadcrumb,get_goods_and_spec
from goods.models import SKU

# 静态化指定SKU商品的页面
def generate_static_sku_detail_html(sku):
    # 参数sku：是SKU模型类对象
    goods,sku,specs = get_goods_and_spec(sku.id)
    # 1、构建模版参数
    context = {
        'categories': get_categories(),
        'breadcrumb': get_breadcrumb(sku.category.id),
        'goods': goods,
        'sku': sku,
        'specs': specs
    }
    # 2、实例化模版对象
    template = loader.get_template('detail.html')
    # 3、渲染得出完整的html页面数据
    html_text = template.render(context=context)
    # 4、保存成静态html文件: ~/front_end_pc/goods/  + <sku_id>.html
    file_path = os.path.join(
        os.path.dirname(os.path.dirname(settings.BASE_DIR)),
        'front_end_pc/goods/%d.html' % sku.id
    )
    with open(file_path, 'w') as f:
        f.write(html_text)


if __name__ == '__main__':
    # 1、读取SKU所有上架的模型类对象查询集
    skus = SKU.objects.filter(is_launched=True)
    # 2、分别调用静态化函数
    for sku in skus:
        generate_static_sku_detail_html(sku)